/**
 * dify.ts
 * Dify平台集成模块
 *
 * 本模块提供与Dify平台API交互所需的所有功能，包括:
 * - 请求体构建函数
 * - 消息解析器
 * - 平台配置
 * - 便捷调用钩子
 */

// 定义消息类型 (为避免循环依赖直接在此定义)
interface Message {
  /** 消息角色: 'system'(系统),'user'(用户),'assistant'(助手) */
  role: 'system' | 'user' | 'assistant';
  /** 消息内容 */
  content: string;
}

/**
 * Dify平台请求体构建函数
 * 构建符合Dify平台API要求的请求体格式
 *
 * @param messages - 消息列表，包含用户、系统和助手的消息
 * @param config - 配置对象
 * @returns 格式化后的请求体对象
 */
export const difyBodyBuilder = (messages: Message[], config: any) => {
  // 提取最后一条用户消息作为查询
  const lastUserMessage = messages.filter(m => m.role === 'user').pop();
  const query = lastUserMessage ? lastUserMessage.content : '';

  return {
    inputs: {}, // 输入参数，可根据需要扩展
    query, // 查询文本，从最后一条用户消息提取
    response_mode: "streaming", // 设置为流式响应模式
    conversation_id: "", // 对话ID，为空则创建新对话
    user: "user", // 用户标识
    files: [] // 文件列表，支持文件上传功能
  };
};

/**
 * Dify平台消息解析器
 * 解析来自Dify平台的响应消息
 *
 * @param message - 服务器响应的消息字符串
 * @returns 解析后的文本内容，解析失败时返回null
 */
export const difyParseMessage = (message: string): string | null => {
  try {
    const dataStr = message.slice(5).trim();
    const parsedData = JSON.parse(dataStr);
    if ('answer' in parsedData) {
      return parsedData.answer;
    }
    return null;
  } catch (e) {
    console.warn('无法解析Dify平台的消息内容:', message);
    return null;
  }
};

/**
 * Dify平台配置
 * 包含与Dify平台交互所需的基础配置
 */
export const difyConfig = {
  /** API基础URL */
  baseUrl: 'http://10.10.10.1:9999/v1/chat-messages',
  /** 消息解析函数 */
  parseFunction: difyParseMessage,
  /** 请求体构建函数 */
  buildBodyFunction: difyBodyBuilder
};

/**
 * 预配置的Dify平台钩子
 * 提供快速配置Dify平台AI聊天的便捷方法
 *
 * @param url - Dify服务的API URL
 * @param authToken - 认证令牌
 * @param isThinking - 是否启用思考模式，默认为false
 * @returns 配置对象，用于传递给useAIStream
 */
export const useDifyChat = (url: string, authToken: string, isThinking: boolean = false) => {
  return {
    platform: 'dify',
    authToken,
    baseUrl: url,
    isThinking
  };
};
